#include "TaskQueue.h"

TaskQueue::TaskQueue()
{
    //初始化互斥锁
    pthread_mutex_init(&m_mutex,NULL);
    
}

TaskQueue::~TaskQueue()
{
    //销毁互斥锁
    pthread_mutex_destroy(&m_mutex);
}

void TaskQueue::addTask(Task task)
{
    //加锁,任务队列属于共享资源,需要线程同步
    pthread_mutex_lock(&m_mutex);
    m_taskQ.push(task);     //任务添加到任务队列
    pthread_mutex_unlock(&m_mutex);
}

void TaskQueue::addTask(callback f, void *arg)
{
    pthread_mutex_lock(&m_mutex);
    m_taskQ.push(Task(f,arg));     //任务添加到任务队列
    pthread_mutex_unlock(&m_mutex);
}

Task TaskQueue::getTask()
{
     pthread_mutex_lock(&m_mutex);
    Task t;
    if(!m_taskQ.empty()){   //任务队列不为空
        t = m_taskQ.front();    
        m_taskQ.pop();  //弹出队头任务
    }
    pthread_mutex_unlock(&m_mutex);
    return t;
    
}
